| feature | ASReview | Rayyan |
|---|---|---|
| Free | Yes | (Yes) Free version available |
| Open Source | Yes | No |
| Platform | User-unfriendly local installation | Browser-based or mobile version |
| Data remains on local machine | Yes | No |
25 September 2023
Example: SVM (support vector machines) used by Rayyan:
ASReview offers several algorithms to choose from
Output:
ASReview sorts the remaining records
Rayyan symbolizes inclusion probability as stars (and sorts)
Stopping rules:
Metrics:
| feature | ASReview | Rayyan |
|---|---|---|
| Free | Yes | (Yes) Free version available |
| Open Source | Yes | No |
| Platform | User-unfriendly local installation | Browser-based or mobile version |
| Data remains on local machine | Yes | No |
| feature | ASReview | Rayyan |
|---|---|---|
| Detecting duplicates | No | Yes |
| Two or more coders possible | No | Yes |
| # of docs to be coded before sorting algorithm can run | 2 (1 exclude, 1 include) | 50 |
| Blinding authors possible | Yes | No |
| Keywords for include/exclude to be highlighted in abstracts | No | Yes (each coder) |
| Specific feature to code exclusion reason | No (needs to be typed in manually in the notes field for every doc) | Yes (once typed in, can be coded with other docs) |
| Feature to code labels | No | Yes (once typed in, can be coded with other docs) |
| Export of coded results in an easy to use/read form | Yes | No (but I can share a script for that) |
You’ll only need to change things in the lines with comments mentioning “DO:”
library(tidyverse)
library(rio)
freq_screened <- rio::import(file=here("[path to]/articles.csv")) # DO: INSERT PATH
freq_screened <- freq_screened %>%
dplyr::mutate(excl_reason = str_extract(.$notes, "RAYYAN-EXCLUSION-REASONS:.*?(\\||$)"), # extract exclusion reasons
labels = str_extract(.$notes, "RAYYAN-LABELS:.*?(\\||$)"), # extract labels coded
decision_c1 = str_extract(.$notes, "Jürgen\"\"=>\"\".*?\"\""), # extract decision from coder 1, DO: CHANGE NAME!
decision_c2 = str_extract(.$notes, "Juergen\"\"=>\"\".*?\"\"")) %>% # extract decision from coder 2, DO: CHANGE NAME!
# remove prefixes or recode
dplyr::mutate(excl_reason = str_remove_all(excl_reason, "RAYYAN-EXCLUSION-REASONS:\\s"),
labels = str_remove_all(labels, "RAYYAN-LABELS:\\s|\\s\\|"),
decision_c1 = case_when(
str_detect(decision_c1, "Excluded") ~ "Excluded",
str_detect(decision_c1, "Included") ~ "Included",
str_detect(decision_c1, "Maybe") ~ "Maybe"),
decision_c2 = case_when(
str_detect(decision_c2, "Excluded") ~ "Excluded",
str_detect(decision_c2, "Included") ~ "Included",
str_detect(decision_c2, "Maybe") ~ "Maybe"),
agreement = case_when( # is there agreement on the decision?
decision_c1 == decision_c2 ~ 1,
TRUE ~ 0)
)Slides: bit.ly/AG-SR-v (view) | bit.ly/AG-SR-d (download, via button on very right)